package service;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import model.Curso;
import model.Endereco;
import model.Locacao;
import model.Professor;
import model.Reserva;

public class ProfessorDAO extends GenericDAOImpl<Professor> {
	
	public ProfessorDAO(EntityManager em) {
		super.entityManager = em;
	}
	
	public Professor criaProfessor(String cpf, String rg, String nome,
			Endereco endereco, Calendar dataNascimento, 
			Curso curso, String matricula, String codigoInst) {
		Professor professor = new Professor();
		professor.setCpf(cpf);
		professor.setCodigoInst(codigoInst);
		professor.setCurso(curso);
		professor.setDataNascimento(dataNascimento);
		professor.setEndereco(endereco);
		professor.setNome(nome);
		professor.setRg(rg);
		professor.setLocacoes(new ArrayList<Locacao>());
		professor.setReservas(new ArrayList<Reserva>());
		
		insereObjeto(professor);
		
		return professor;
	}

	@Override
	public Professor localizaObjeto(Long objId) {
		Professor obj = entityManager.getReference(Professor.class, objId);
		return obj;
	}

	@Override
	public List<Professor> listaObjetos() {
		TypedQuery<Professor> query = entityManager.createQuery(
				"SELECT e FROM Professor e", Professor.class);
		return query.getResultList();
	}

	@Override
	public void deletaObjetos() {
		TypedQuery<Professor> query = entityManager.createQuery(
				"DELETE FROM Professor", Professor.class);
		query.executeUpdate();
	}

	public void addLocacao(Long objId, Locacao locacao) {
		Professor prof = localizaObjeto(objId);
		if (prof != null && 
				prof.getLocacoes().size() <
					Professor.NUMERO_MAXIMO_LOCACAO) {
			prof.getLocacoes().add(locacao);
		
		}
	}

	public void addReserva(Long objId, Reserva reserva) {
		Professor prof = localizaObjeto(objId);
		if (prof != null && 
				prof.getReservas().size() <
					Professor.NUMERO_MAXIMO_RESERVA) {
			prof.getReservas().add(reserva);
		
		}
		
	}

}
